#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "header.h"


/*
  Définitin des fonctions permettant le cryptage de chaîne de char simple (sans majuscule, sans ponctuation,
  sans caractères spéciaux) à partir d'une clé connue. 
  Le cryptage "simple" consiste à décaler tous les caractères de "clé" caractères.

  Ex : si on veut crypter 'c' avec la clé 4, on obtient 'g'
 */



/*
  char c : caractère à crypter, c est un caractère compris entre 'a' et 'z' inclus.
  int key : clé. Défini le nombre de case à décaler. La clé 26_et ses multiples_ est déconseillée
  mais pas impossible (voir Hypothèses dans header.h)

  Résultat : le caractère 'c' codé par la clé simple key
 */
char CSKC(char c, int key)
{
  char aux;
  int k = key%26;
  if (c+k > 122)
    {
      aux =(char) (((c+k)%122)+96);  //Si dépassement, on doit ajouter 96 pour commencer à 'a'
    }
  else
    {
      aux = (char)c+k;
    }
  return aux; //décale de "cle" caractère. La modulo sert à gérer le dépassement de l'alphabet.
}



/*
  char * word : Chaîne de caractère (mot) à crypter.
  int key : clé.
  
  Résultat : le mot word codé par la clé key.
 */
char* CSK(char* word, int key)
{
  char* result = (char*) malloc((strlen(word))*sizeof(char));  //Allocation mémoire pour le résultat (taille de word)
  for (int i = 0; i < strlen(word); i++)
    {
      result[i] = CSKC(word[i], key);  //cryptage caractère par caractère
    }
  return result;
} 



/*
  char* txt : Texte à crypter (pour le moment suites de mots séparés par un espace)
  int key : clé.

  Résultat : le chaîne de caractère codé par la clé key.

  Améliorations possibles : strtok permet de tokenizer un char* à partir d'un autre char*. On peut donc ajouter de la ponctuation.
 
char* CSK(char txt[], int key)
{
  char* result = (char*) malloc((strlen(txt)+1)*sizeof(char)); //Allocation mémoire pour le résultat
  char* aux = strtok(txt, " "); //Début de la tokenization de txt, aux vaut le premier "mot" de txt
  while(aux != NULL)  //tant qu'il y a des mots dans txt
    {
      printf("%s \n", aux);
      result = strcat(result, CSKW(aux, key));  //on ajoute le codage du mot courant au résultat
      aux = strtok(NULL, " ");       //et on passe au mot suivant
    }
  return result;
}

*/
